iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
自我挑戰組

菜鳥的前端學習筆記系列 第 11

DAY11 - 作用域

  • 分享至 

  • xImage
  •  

前言

今天聊聊到底這裡有效還是那裡有效(在幹嘛?)的作用域


作用域

當變數宣告的方式及位置不同時,都會影響到在操作或輸出時會產生不一樣的結果,作用域可說是宣告的變數其有效區域到哪裡,主要可分為全域及區域。

首先,位在文件的第一層稱作全域,像是文件一開頭就宣告的變數,就是全域的變數,全域變數的影響力是最大的,其他區域裡都能夠對它進行操作或產生其他運作。

而區域則是區塊內的變數,所謂的區塊就如ifforwhile語法中會使用到的大括號{}裡面的內容,區域內的變數僅供區域使用,若想在區域外取用區域內的變數時,程式便會發出錯誤訊息,告知你這個變數沒有被定義。

let x = 5  // 全域變數

if (x === 5) {
  let y = 8 // 區域變數
  console.log(y) // 8
}

console.log(x)  // 5
console.log(y)  // 程式會回報錯誤 ReferenceError: y is not defined

其實在還沒有那麼熟悉前,有些觀念很容易搞混,關於作用域的觀念用一句話簡單理解的話,就是兒子(區域)可以拿爸爸(全域)的東西,可是爸爸不能拿兒子的東西(寫程式的時候可以邊寫邊想這句話)。


再認識傳統的var

雖然幾天前有稍微提過varletconst,但隨著對作用域有更清楚的認識後,也能更了解為什麼不建議再使用var來宣告變數,由於var不受到區域的規則限制,又允許進行重複宣告,相對letconst是較為寬鬆的宣告方式,假如變數沒有明確的使用認知時,很容易讓程式碼背離預期的結果外,也會產生更多延伸的問題,所以還是建議以letconst為主來進行宣告變數。


上一篇
DAY10 - while
下一篇
DAY12 - 來猜猜數字
系列文
菜鳥的前端學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言